package com.dkd.day20251112;

import com.dkd.day20250614.ListNode;

public class Solution {
    //给你两个单链表的头节点 headA 和 headB ，请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点，返回 null 。
    //
    //图示两个链表在节点 c1 开始相交：
    //
    //
    //
    //题目数据 保证 整个链式结构中不存在环。
    //
    //注意，函数返回结果后，链表必须 保持其原始结构 。
    public static void main(String[] args) {

    }
    //错误解法，如果节点有相同值会出现失误
    //不能依靠值判断，而是依靠=
/*    public static ListNode getIntersectionNode(ListNode headA, ListNode headB) {

        //两个指针到底后互换节点走
        if (headA == null || headB == null) return null;

        //
        ListNode answer = null;
        ListNode index1 = headA, index2 = headB;
        boolean flag1=false,flag2=false;
        while (index1 != null && index2 != null) {
            if (index1.val == index2.val) {
                answer = index1;
                return answer;
            }else{
                if(index1.next == null&&flag1 ==false) {
                    index1 = headB;
                    flag1=true;
                    index2 = index2.next;
                }else if(index2.next == null&&flag2 ==false) {
                    index2 = headA;
                    flag2 = true;
                    index1 = index1.next;
                }else {
                    index1 = index1.next;
                    index2 = index2.next;
                }
            }
        }
        return answer;

    }*/

    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        if (headA == null || headB == null) {
            return null;
        }
        ListNode pA = headA, pB = headB;
        while (pA != pB) {
            pA = pA == null ? headB : pA.next;
            pB = pB == null ? headA : pB.next;
        }
        return pA;
    }
}
